/**
 * @param {Function} fn 防抖函数
 * @param {Number} delay 延迟时间
 */
export function debounce(fn, delay) {
  var timer
  return function () {
    var context = this
    var args = arguments
    clearTimeout(timer)
    timer = setTimeout(function () {
      fn.apply(context, args)
    }, delay)
  }
}

/**
 * @param {date} time 需要转换的时间
 * @param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
 */
export function formatTime(time, fmt) {
  if (!time) return ''
  else {
    const date = new Date(time)
    const o = {
      'M+': date.getMonth() + 1,
      'd+': date.getDate(),
      'H+': date.getHours(),
      'm+': date.getMinutes(),
      's+': date.getSeconds(),
      'q+': Math.floor((date.getMonth() + 3) / 3),
      S: date.getMilliseconds(),
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (date.getFullYear() + '').substr(4 - RegExp.$1.length)
      )
    }
    for (const k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          RegExp.$1.length === 1
            ? o[k]
            : ('00' + o[k]).substr(('' + o[k]).length)
        )
      }
    }
    return fmt
  }
}

export function randomNum(range = { min: 0, max: 100 }, count = 5, fixed = 0) {
  let plus = 1
  const min = range.min || 0
  const max = range.max || 100
  let result = []
  for (let i = 0; i < fixed; i++) {
    plus = plus + '0'
  }
  plus = Number(plus)
  for (let i = 0; i < count; i++) {
    const num = (Math.floor(Math.random() * (max - min + 1) * plus) + min) / plus
    result.push(num)
  }
  return result
}

export function handleNumber(num, splitNum = 5) {
  if (!num) return 0
  // 12345 ，科学计数法数值部分*10为 12.345 ，则向上取整（12.345/4）*4 = 16 ，此用例N为3，则再乘以1000，计算最大值为  16000，则刻度值为 0  4000   8000   12000   16000
  // 当度量最大值为1<y<10时，最大值取值范围为2,4,8,10；计算规则为向上取数，以最接近的为准，如 5.9343则取8;
  // 当度量最大值为0<y<1时，最大值取值范围为0.1,0.2,0.4,0.8,1；计算规则为向上取数，以最接近的为准，如 0.1334则取0.2;较小数值0.1以下的均取0.1；
  if (num > 0.1 && num <= 1) {
    const arr = [0.2, 0.4, 0.6, 0.8, 1]
    num = arr.find(item => item - num >= 0)
  } else if (num > 1 && num <= 10) {
    const arr = [2, 4, 6, 8, 10]
    num = arr.find(item => item - num >= 0)
  } else if (num > 10) {
    // 计算需要补几个0
    const N = Math.ceil(num).toString().length - 2
    num = Math.ceil(Math.ceil(num).toString().replace(/(^\d{2})/, '$1.') / splitNum) * splitNum
    if (N) {
      for (let i = 0; i < N; i++) {
        num *= 10
      }
    }
  } else {
    num = 0.1
  }
  return num
}
